#!/bin/bash

# 获取当前工作目录
cur_dir=$(cd $(dirname $BASH_SOURCE) && command pwd -P)

# 定义 modulefiles 目录
module_dir="modulefiles"

# 定义组件和编译器的版本号
declare -A component_versions=(
    ["compiler"]="4.2.0.2"
    ["hmpi"]="25.1.0"
    ["kml"]="25.1.0"
    ["kupl"]="25.1.0"
    ["hio"]="25.0.0"
    ["kulitho"]="25.1.0"
    ["kutacc"]="25.1.0"
)
declare -A compiler_versions=(
    ["gcc"]="12.3.1"
    ["bisheng"]="4.2.0.2"
)

# 创建模块链接函数
create_mod_link()
{
    local component=$1
    local compiler=$2

    # 处理 hio 组件
    if [ "$component" = "hio" ]; then
        local component_version=${component_versions[$component]}
        relativepath="../${component}/${module_dir}"
        realmodpath="${cur_dir}/${component}/${module_dir}"
        linkmodpath="${cur_dir}/${module_dir}/${component}${component_version}"
    # 处理编译器组件
    elif [ "$component" = "compiler" ]; then
        local compiler_version=${compiler_versions[$compiler]}
        relativepath="../../${component}/${compiler}/${module_dir}"
        realmodpath="${cur_dir}/${component}/${compiler}/${module_dir}"
        linkmodpath="${cur_dir}/${module_dir}/${compiler}/compiler${compiler_version}"
    # 处理其他组件
    else
        local component_version=${component_versions[$component]}
        relativepath="../../${component}/${compiler}/${module_dir}"
        realmodpath="${cur_dir}/${component}/${compiler}/${module_dir}"
        linkmodpath="${cur_dir}/${module_dir}/${compiler}/${component}${component_version}"
    fi

    # 检查真实目录是否存在
    if [ ! -d "${realmodpath}" ]; then
        return
    fi

    # 检查符号链接是否已存在
    if [ -L "${linkmodpath}" ]; then
        return
    fi

    # 创建链接的父目录
    mkdir -p "$(dirname "${linkmodpath}")"

    # 创建符号链接
    ln -sf "${relativepath}" "${linkmodpath}"
}

# 创建模块函数
create_mod()
{
    local component=$1
    local compiler=$2

    # 调用创建符号链接函数
    create_mod_link "$component" "$compiler"
}

# 定义组件和编译器列表
list_com=("compiler" "hmpi" "kml" "kupl" "hio" "kulitho" "kutacc")
list_compiler=("gcc" "bisheng")

# 遍历组件和编译器，生成模块链接
for component in "${list_com[@]}"; do
    if [ "$component" = "hio" ]; then
        # hio 组件不依赖编译器版本
        create_mod "$component" ""
    else
        for compiler in "${list_compiler[@]}"; do
            create_mod "$component" "$compiler"
        done
    fi
done